home *** CD-ROM | disk | FTP | other *** search
- ;void char_string(return_string,string_length,character);
- ; unsigned char *return_string,character;
- ; unsigned short string_length;
-
- EXTRN _memory_model:byte
-
- _TEXT SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:_TEXT
- PUBLIC _char_string
- _char_string proc near
- push di ;
- mov bx,sp ;BX pts to stack
- pushf ;
- cmp _memory_model,0 ;near or far?
- jle begin ;jump if near
- inc bx ;else add 2 to BX
- inc bx ;
- begin: cmp _memory_model,2 ;data near or far?
- jb L0 ;jump if near
- les di,ss:dword ptr[bx+4] ;ES:DI pts to return string
- inc bx ;inc BX since far ptr
- inc bx ;
- jmp short L00 ;jump ahead
- L0: mov ax,ds ;ES = DS
- mov es,ax ;
- mov di,ss:[bx+4] ;
- L00: mov cx,ss:[bx+6] ;get string length
- or cx,cx ;test for 0
- jz L1 ;
- mov al,ss:[bx+8] ;get the character
- cld ;direction forward
- rep stosb ;write the string
- L1: mov byte ptr es:[di],0 ;add terminator
- popf ;
- pop di ;
- cmp _memory_model,0 ;quit
- jle quit ;
- db 0CBh ;RET far
- quit: ret ;RET near
- _char_string ENDP
- _TEXT ENDS
- END